package ejemplo;

import java.net.URL;
import javax.xml.soap.*;

public class ClienteSOAP {
	
	SOAPMessage message;
	SOAPEnvelope envelope;
	SOAPBody body;
	SOAPConnection con;
	
	public static void main(String[] args) {
		try {
			System.setProperty("http.proxyHost","proxy.upf.es");
			System.setProperty("http.proxyPort","8080");
			ClienteSOAP call = new ClienteSOAP();
			// 	llamar al webservice y obtener respuesta
			call.crearMensaje(args[0]);
			call.getMensaje().writeTo(System.out);
			// enviar mensaje y obtener respuesta
			SOAPMessage response = call.enviar();
			// imprimir XML con respuesta
			response.writeTo(System.out);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	
	public ClienteSOAP() throws Exception {
		this.con = SOAPConnectionFactory.newInstance().createConnection();
		this.message = MessageFactory.newInstance().createMessage();
		this.envelope = message.getSOAPPart().getEnvelope();
		this.body = envelope.getBody();
	}
	
	public void crearMensaje(String codigo) throws Exception {
		// 	namespace (primeras lineas del xml)
		String ns = "http://www.oorsprong.org/websamples.countryinfo";
		message.getMimeHeaders().setHeader("SOAPAction", "");
		// crear un elemento, y asignar un prefijo comun "pre"
		// crear el elemento con la funcion que queremos llamar
		Name operacion = envelope.createName("CapitalCity", "pre", ns);
		SOAPBodyElement op = body.addBodyElement(operacion);
		// crear un elemento que lo colgaremos a la operacion
		Name param1 = envelope.createName("sCountryISOCode", "pre", ns);
		SOAPElement par1 = op.addChildElement(param1);
		par1.addTextNode(codigo);
	}
	
	public SOAPMessage getMensaje() {
		return message;
	}
	
	public SOAPMessage enviar() throws Exception {
		// url que publica el WSDL
		URL endpoint = new URL("http://www.oorsprong.org/websamples.countryinfo/CountryInfoService.wso?WSDL");
		return con.call(message, endpoint);
	}
}